Join-алгоритмы и сортировки

Зачем это знать:

  • Часто “медленно” — это не индекс, а join/сортировка/агрегация.

  • Выбор join-алгоритма зависит от кардинальностей и индексов.

Связанные темы:

Планировщик запросов и EXPLAIN

Память, кэш и I/O


Join-алгоритмы

Nested Loop

  • Хорош при малом внешнем наборе и индексируемом внутреннем.

  • Плох при больших объёмах: “внешние строки × поиск во внутреннем”.

Hash Join

  • Строит хэш-таблицу по одному входу и пробегает другим.

  • Обычно хорош для средних/больших объёмов, если хватает памяти.

  • Если памяти не хватает — может “разливаться” на диск (становится резко хуже).

Merge Join

  • Требует отсортированные входы (или сортирует).

  • Хорош, когда входы уже отсортированы по ключу join или сортировка дешёвая.


Сортировки и work_mem

  • Sort может быть:
  • в памяти (быстро),
  • на диске (temp files) — резко медленнее.

  • На практике часто причина — не хватает work_mem на конкретный запрос/узел.

(Тонкая настройка — DBA, но понимать симптоматику важно.)

Последнее обновление